๋ ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ์ฝ๋๋ฅผ ์ํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ์์ด ํจํด ๋งค์นญ ์ฑ๋ฅ ์ต์ ํ ๊ธฐ๋ฒ์ ์ดํด๋ณด์ธ์. ์ ๊ท ํํ์, ๋์ฒด ์๊ณ ๋ฆฌ์ฆ, ๋ชจ๋ฒ ์ฌ๋ก์ ๋ํด ์์๋ด ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ํจํด ๋งค์นญ ๋ฌธ์์ด ์ฑ๋ฅ: ๋ฌธ์์ด ํจํด ์ต์ ํ
๋ฌธ์์ด ํจํด ๋งค์นญ์ ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ๋ถํฐ ํ ์คํธ ์ฒ๋ฆฌ์ ์ด๋ฅด๊ธฐ๊น์ง ๋ง์ ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ธฐ๋ณธ์ ์ธ ์์ ์ ๋๋ค. ์ด๋ฌํ ์์ ์ ์ฑ๋ฅ์ ํนํ ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์ด๋ ๋ณต์กํ ํจํด์ ๋ค๋ฃฐ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฐ์ ์ธ ์๋ต์ฑ๊ณผ ํจ์จ์ฑ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ์ด ๊ธ์ ๊ธ๋ก๋ฒ ๊ฐ๋ฐ ํ๊ฒฝ์ ์ ์ฉํ ์ ์๋ ๋ค์ํ ๊ธฐ๋ฒ๊ณผ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ค๋ฃจ๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ์์ด ํจํด ๋งค์นญ ์ต์ ํ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฌธ์์ด ํจํด ๋งค์นญ ์ดํดํ๊ธฐ
ํต์ฌ์ ์ผ๋ก, ๋ฌธ์์ด ํจํด ๋งค์นญ์ ๋ ํฐ ๋ฌธ์์ด ๋ด์์ ํน์ ํจํด์ ์ถํ์ ๊ฒ์ํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๋ด์ฅ ๋ฉ์๋๋ฅผ ์ ๊ณตํฉ๋๋ค:
String.prototype.indexOf(): ๋ถ๋ถ ๋ฌธ์์ด์ ์ฒซ ๋ฒ์งธ ๋ฐ์ ์์น๋ฅผ ์ฐพ๋ ๊ฐ๋จํ ๋ฉ์๋์ ๋๋ค.String.prototype.lastIndexOf(): ๋ถ๋ถ ๋ฌธ์์ด์ ๋ง์ง๋ง ๋ฐ์ ์์น๋ฅผ ์ฐพ์ต๋๋ค.String.prototype.includes(): ๋ฌธ์์ด์ด ํน์ ๋ถ๋ถ ๋ฌธ์์ด์ ํฌํจํ๋์ง ํ์ธํฉ๋๋ค.String.prototype.startsWith(): ๋ฌธ์์ด์ด ํน์ ๋ถ๋ถ ๋ฌธ์์ด๋ก ์์ํ๋์ง ํ์ธํฉ๋๋ค.String.prototype.endsWith(): ๋ฌธ์์ด์ด ํน์ ๋ถ๋ถ ๋ฌธ์์ด๋ก ๋๋๋์ง ํ์ธํฉ๋๋ค.String.prototype.search(): ์ ๊ท ํํ์์ ์ฌ์ฉํ์ฌ ์ผ์น ํญ๋ชฉ์ ์ฐพ์ต๋๋ค.String.prototype.match(): ์ ๊ท ํํ์์ผ๋ก ์ฐพ์ ์ผ์น ํญ๋ชฉ์ ๊ฒ์ํฉ๋๋ค.String.prototype.replace(): ํจํด(๋ฌธ์์ด ๋๋ ์ ๊ท ํํ์)์ ๋ฐ์์ ๋ค๋ฅธ ๋ฌธ์์ด๋ก ๋ฐ๊ฟ๋๋ค.
์ด๋ฌํ ๋ฉ์๋๋ค์ ํธ๋ฆฌํ์ง๋ง, ์ฑ๋ฅ ํน์ฑ์ ๊ฐ๊ธฐ ๋ค๋ฆ
๋๋ค. ๊ฐ๋จํ ๋ถ๋ถ ๋ฌธ์์ด ๊ฒ์์ ๊ฒฝ์ฐ indexOf(), includes(), startsWith(), endsWith()์ ๊ฐ์ ๋ฉ์๋๋ก ์ถฉ๋ถํ ๋๊ฐ ๋ง์ต๋๋ค. ํ์ง๋ง ๋ ๋ณต์กํ ํจํด์ ๊ฒฝ์ฐ, ์ผ๋ฐ์ ์ผ๋ก ์ ๊ท ํํ์์ด ์ฌ์ฉ๋ฉ๋๋ค.
์ ๊ท ํํ์(RegEx)์ ์ญํ
์ ๊ท ํํ์(RegEx)์ ๋ณต์กํ ๊ฒ์ ํจํด์ ์ ์ํ๋ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์์ ์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค:
- ์ด๋ฉ์ผ ์ฃผ์ ๋ฐ ์ ํ๋ฒํธ ์ ํจ์ฑ ๊ฒ์ฌ
- ๋ก๊ทธ ํ์ผ ํ์ฑ
- HTML์์ ๋ฐ์ดํฐ ์ถ์ถ
- ํจํด ๊ธฐ๋ฐ ํ ์คํธ ๊ต์ฒด
ํ์ง๋ง, ์ ๊ท ํํ์์ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ต๋๋ค. ์๋ชป ์์ฑ๋ ์ ๊ท ํํ์์ ์ฌ๊ฐํ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ด๋ํ ์ ์์ต๋๋ค. ํจ์จ์ ์ธ ํจํด์ ์์ฑํ๋ ค๋ฉด ์ ๊ท ํํ์ ์์ง์ด ์๋ํ๋ ๋ฐฉ์์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ ๊ท ํํ์ ์์ง ๊ธฐ๋ณธ
๋๋ถ๋ถ์ ์๋ฐ์คํฌ๋ฆฝํธ ์ ๊ท ํํ์ ์์ง์ ๋ฐฑํธ๋ํน ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ํจํด์ด ์ผ์นํ์ง ์์ ๋ ์์ง์ด ๋ค๋ฅธ ๊ฐ๋ฅ์ฑ์ ์๋ํ๊ธฐ ์ํด "๋ฐฑํธ๋"ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ์ด ๋ฐฑํธ๋ํน์ ํนํ ๋ณต์กํ ํจํด๊ณผ ๊ธด ์ ๋ ฅ ๋ฌธ์์ด์ ๋ค๋ฃฐ ๋ ๋งค์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ต๋๋ค.
์ ๊ท ํํ์ ์ฑ๋ฅ ์ต์ ํ
๋ ๋์ ์ฑ๋ฅ์ ์ํด ์ ๊ท ํํ์์ ์ต์ ํํ๋ ๋ช ๊ฐ์ง ๊ธฐ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1. ๊ตฌ์ฒด์ ์ผ๋ก ์์ฑํ๊ธฐ
ํจํด์ด ๊ตฌ์ฒด์ ์ผ์๋ก ์ ๊ท ํํ์ ์์ง์ด ํด์ผ ํ ์ผ์ด ์ค์ด๋ญ๋๋ค. ๊ด๋ฒ์ํ ๊ฐ๋ฅ์ฑ๊ณผ ์ผ์นํ ์ ์๋ ์ง๋์น๊ฒ ์ผ๋ฐ์ ์ธ ํจํด์ ํผํ์ธ์.
์์: ๋ชจ๋ ๋ฌธ์์ ์ผ์น์ํค๊ธฐ ์ํด .*๋ฅผ ์ฌ์ฉํ๋ ๋์ , ์ซ์๋ฅผ ์์ํ๋ ๊ฒฝ์ฐ \d+(ํ๋ ์ด์์ ์ซ์)์ ๊ฐ์ ๋ ๊ตฌ์ฒด์ ์ธ ๋ฌธ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ธ์.
2. ๋ถํ์ํ ๋ฐฑํธ๋ํน ํผํ๊ธฐ
๋ฐฑํธ๋ํน์ ์ฑ๋ฅ ์ ํ์ ์ฃผ๋ฒ์ ๋๋ค. ๊ณผ๋ํ ๋ฐฑํธ๋ํน์ผ๋ก ์ด์ด์ง ์ ์๋ ํจํด์ ํผํ์ธ์.
์์: "this is a long string 2024" ๋ฌธ์์ด์ ์ ์ฉ๋ ๋ ์ง ์ผ์น ํจํด ^(.*)([0-9]{4})$๋ฅผ ์๊ฐํด ๋ณด์ธ์. (.*) ๋ถ๋ถ์ ์ฒ์์ ์ ์ฒด ๋ฌธ์์ด์ ์๋นํ ๋ค์, ์์ง์ ๋์ ์๋ ๋ค ์๋ฆฌ ์ซ์๋ฅผ ์ฐพ๊ธฐ ์ํด ๋ฐฑํธ๋ํฉ๋๋ค. ๋ ๋์ ์ ๊ทผ ๋ฐฉ์์ ^(.*?)([0-9]{4})$์ ๊ฐ์ ๋นํ์์ ์๋์๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, ์ํฉ์ด ํ๋ฝํ๋ค๋ฉด ๋ฐฑํธ๋ํน ํ์์ฑ์ ์์ ํ ํผํ๋ ๋ ๊ตฌ์ฒด์ ์ธ ํจํด์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ์๋ฅผ ๋ค์ด, ๋ ์ง๊ฐ ํญ์ ํน์ ๊ตฌ๋ถ์ ๋ค์ ๋ฌธ์์ด ๋์ ์ฌ ๊ฒ์ด๋ผ๋ ๊ฒ์ ์๋ค๋ฉด ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
3. ์ต์ปค ์ฌ์ฉํ๊ธฐ
์ต์ปค(๋ฌธ์์ด ์์์ ์ํ ^, ๋ฌธ์์ด ๋์ ์ํ $, ๋จ์ด ๊ฒฝ๊ณ๋ฅผ ์ํ \b)๋ ๊ฒ์ ๊ณต๊ฐ์ ์ ํํ์ฌ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์์: ๋ฌธ์์ด ์์ ๋ถ๋ถ์์๋ง ๋ฐ์ํ๋ ์ผ์น ํญ๋ชฉ์๋ง ๊ด์ฌ์ด ์๋ค๋ฉด ^ ์ต์ปค๋ฅผ ์ฌ์ฉํ์ธ์. ๋ง์ฐฌ๊ฐ์ง๋ก, ๋์์๋ง ์ผ์น ํญ๋ชฉ์ ์ํ๋ค๋ฉด $ ์ต์ปค๋ฅผ ์ฌ์ฉํ์ธ์.
4. ๋ฌธ์ ํด๋์ค ํ๋ช ํ๊ฒ ์ฌ์ฉํ๊ธฐ
๋ฌธ์ ํด๋์ค(์: [a-z], [0-9], \w)๋ ์ผ๋ฐ์ ์ผ๋ก ์ ํ(alternation)(์: (a|b|c))๋ณด๋ค ๋น ๋ฆ
๋๋ค. ๊ฐ๋ฅํ ๋๋ง๋ค ๋ฌธ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ธ์.
5. ์ ํ(Alternation) ์ต์ ํ
์ ํ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ, ๊ฐ์ฅ ๊ฐ๋ฅ์ฑ์ด ๋์ ๊ฒ๋ถํฐ ๊ฐ์ฅ ๋ฎ์ ์์๋ก ๋์์ ์ ๋ ฌํ์ธ์. ์ด๋ ๊ฒ ํ๋ฉด ๋ง์ ๊ฒฝ์ฐ์ ์ ๊ท ํํ์ ์์ง์ด ๋ ๋นจ๋ฆฌ ์ผ์น ํญ๋ชฉ์ ์ฐพ์ ์ ์์ต๋๋ค.
์์: "apple", "banana", "cherry"๋ผ๋ ๋จ์ด๋ฅผ ๊ฒ์ํ๊ณ "apple"์ด ๊ฐ์ฅ ํํ ๋จ์ด๋ผ๋ฉด, ์ ํ์ (apple|banana|cherry)๋ก ์ ๋ ฌํ์ธ์.
6. ์ ๊ท ํํ์ ๋ฏธ๋ฆฌ ์ปดํ์ผํ๊ธฐ
์ ๊ท ํํ์์ ์ฌ์ฉ๋๊ธฐ ์ ์ ๋ด๋ถ ํํ์ผ๋ก ์ปดํ์ผ๋ฉ๋๋ค. ๋์ผํ ์ ๊ท ํํ์์ ์ฌ๋ฌ ๋ฒ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, RegExp ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์ฌ์ฌ์ฉํจ์ผ๋ก์จ ๋ฏธ๋ฆฌ ์ปดํ์ผํ์ธ์.
์์:
```javascript const regex = new RegExp("pattern"); // ์ ๊ท ํํ์ ๋ฏธ๋ฆฌ ์ปดํ์ผ for (let i = 0; i < 1000; i++) { regex.test(string); } ```์ด๊ฒ์ ๋ฃจํ ์์์ ์๋ก์ด RegExp ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋น ๋ฆ
๋๋ค.
7. ์บก์ฒํ์ง ์๋ ๊ทธ๋ฃน ์ฌ์ฉํ๊ธฐ
์บก์ฒ ๊ทธ๋ฃน(๊ดํธ๋ก ์ ์)์ ์ผ์น๋ ๋ถ๋ถ ๋ฌธ์์ด์ ์ ์ฅํฉ๋๋ค. ์ด ์บก์ฒ๋ ๋ถ๋ถ ๋ฌธ์์ด์ ์ ๊ทผํ ํ์๊ฐ ์๋ค๋ฉด, ์ด๋ฅผ ์ ์ฅํ๋ ์ค๋ฒํค๋๋ฅผ ํผํ๊ธฐ ์ํด ์บก์ฒํ์ง ์๋ ๊ทธ๋ฃน((?:...))์ ์ฌ์ฉํ์ธ์.
์์: ํจํด๊ณผ ์ผ์น์ํค๊ธฐ๋ง ํ๊ณ ์ผ์น๋ ํ
์คํธ๋ฅผ ๊ฒ์ํ ํ์๊ฐ ์๋ค๋ฉด (pattern) ๋์ (?:pattern)์ ์ฌ์ฉํ์ธ์.
8. ๊ฐ๋ฅํ๋ฉด ํ์์ ์๋์ ํผํ๊ธฐ
ํ์์ ์๋์(์: *, +)๋ ๊ฐ๋ฅํ ํ ๋ง์ด ์ผ์น์ํค๋ ค๊ณ ํฉ๋๋ค. ๋๋ก๋ ๋นํ์์ ์๋์(์: *?, +?)๊ฐ ํนํ ๋ฐฑํธ๋ํน์ด ์ฐ๋ ค๋ ๋ ๋ ํจ์จ์ ์ผ ์ ์์ต๋๋ค.
์์: ์์ ๋ฐฑํธ๋ํน ์์์์ ๋ณด์๋ฏ์ด, .* ๋์ .*?๋ฅผ ์ฌ์ฉํ๋ฉด ์ผ๋ถ ์๋๋ฆฌ์ค์์ ๊ณผ๋ํ ๋ฐฑํธ๋ํน์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
9. ๊ฐ๋จํ ๊ฒฝ์ฐ์๋ ๋ฌธ์์ด ๋ฉ์๋ ์ฌ์ฉ ๊ณ ๋ คํ๊ธฐ
๋ฌธ์์ด์ ํน์ ๋ถ๋ถ ๋ฌธ์์ด์ด ํฌํจ๋์ด ์๋์ง ํ์ธํ๋ ๊ฒ๊ณผ ๊ฐ์ ๊ฐ๋จํ ํจํด ๋งค์นญ ์์
์ ๊ฒฝ์ฐ, indexOf()๋ includes() ๊ฐ์ ๋ฌธ์์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ๊ท ํํ์์ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ ๋น ๋ฅผ ์ ์์ต๋๋ค. ์ ๊ท ํํ์์ ์ปดํ์ผ ๋ฐ ์คํ๊ณผ ๊ด๋ จ๋ ์ค๋ฒํค๋๊ฐ ์์ผ๋ฏ๋ก, ๋ ๋ณต์กํ ํจํด์ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
๋ฌธ์์ด ํจํด ๋งค์นญ์ ์ํ ๋์ฒด ์๊ณ ๋ฆฌ์ฆ
์ ๊ท ํํ์์ ๊ฐ๋ ฅํ์ง๋ง ๋ชจ๋ ๋ฌธ์์ด ํจํด ๋งค์นญ ๋ฌธ์ ์ ํญ์ ๊ฐ์ฅ ํจ์จ์ ์ธ ํด๊ฒฐ์ฑ ์ ์๋๋๋ค. ํน์ ์ ํ์ ํจํด๊ณผ ๋ฐ์ดํฐ์ ์ ๊ฒฝ์ฐ, ๋์ฒด ์๊ณ ๋ฆฌ์ฆ์ด ์๋นํ ์ฑ๋ฅ ํฅ์์ ์ ๊ณตํ ์ ์์ต๋๋ค.
1. ๋ณด์ด์ด-๋ฌด์ด ์๊ณ ๋ฆฌ์ฆ
๋ณด์ด์ด-๋ฌด์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ ํฐ ํ ์คํธ ๋ด์์ ๊ณ ์ ๋ ๋ฌธ์์ด์ ๋ฐ์์ ์ฐพ๋ ๋ฐ ์์ฃผ ์ฌ์ฉ๋๋ ๋น ๋ฅธ ๋ฌธ์์ด ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ๊ฒ์ ํจํด์ ์ฌ์ ์ฒ๋ฆฌํ์ฌ ํ ์ด๋ธ์ ๋ง๋ค์ด ์๊ณ ๋ฆฌ์ฆ์ด ์ผ์น ํญ๋ชฉ์ ํฌํจํ ์ ์๋ ํ ์คํธ ๋ถ๋ถ์ ๊ฑด๋๋ธ ์ ์๋๋ก ์๋ํฉ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ด์ฅ ๋ฌธ์์ด ๋ฉ์๋์์๋ ์ง์ ์ง์๋์ง ์์ง๋ง, ๋ค์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๊ตฌํ์ ์ฐพ๊ฑฐ๋ ์๋์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
2. ์ปค๋์ค-๋ชจ๋ฆฌ์ค-ํ๋ซ(KMP) ์๊ณ ๋ฆฌ์ฆ
KMP ์๊ณ ๋ฆฌ์ฆ์ ๋ถํ์ํ ๋ฐฑํธ๋ํน์ ํผํ๋ ๋ ๋ค๋ฅธ ํจ์จ์ ์ธ ๋ฌธ์์ด ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ ๋ํ ๊ฒ์ ํจํด์ ์ฌ์ ์ฒ๋ฆฌํ์ฌ ๊ฒ์ ๊ณผ์ ์ ์๋ดํ๋ ํ ์ด๋ธ์ ๋ง๋ญ๋๋ค. ๋ณด์ด์ด-๋ฌด์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก KMP๋ ์ผ๋ฐ์ ์ผ๋ก ์๋์ผ๋ก ๊ตฌํ๋๊ฑฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฐพ์ ์ ์์ต๋๋ค.
3. ํธ๋ผ์ด(Trie) ์๋ฃ ๊ตฌ์กฐ
ํธ๋ผ์ด(์ ๋์ฌ ํธ๋ฆฌ๋ผ๊ณ ๋ ํจ)๋ ๋ฌธ์์ด ์งํฉ์ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ ๊ฒ์ํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ํธ๋ฆฌ์ ๊ฐ์ ์๋ฃ ๊ตฌ์กฐ์ ๋๋ค. ํธ๋ผ์ด๋ ํ ์คํธ ๋ด์์ ์ฌ๋ฌ ํจํด์ ๊ฒ์ํ๊ฑฐ๋ ์ ๋์ฌ ๊ธฐ๋ฐ ๊ฒ์์ ์ํํ ๋ ํนํ ์ ์ฉํฉ๋๋ค. ์๋ ์์ฑ ๋ฐ ๋ง์ถค๋ฒ ๊ฒ์ฌ์ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
4. ์ ๋ฏธ์ฌ ํธ๋ฆฌ/์ ๋ฏธ์ฌ ๋ฐฐ์ด
์ ๋ฏธ์ฌ ํธ๋ฆฌ์ ์ ๋ฏธ์ฌ ๋ฐฐ์ด์ ํจ์จ์ ์ธ ๋ฌธ์์ด ๊ฒ์ ๋ฐ ํจํด ๋งค์นญ์ ์ฌ์ฉ๋๋ ์๋ฃ ๊ตฌ์กฐ์ ๋๋ค. ๊ฐ์ฅ ๊ธด ๊ณตํต ๋ถ๋ถ ๋ฌธ์์ด์ ์ฐพ๊ฑฐ๋ ํฐ ํ ์คํธ ๋ด์์ ์ฌ๋ฌ ํจํด์ ๊ฒ์ํ๋ ๊ฒ๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ํนํ ํจ๊ณผ์ ์ ๋๋ค. ์ด๋ฌํ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์ถํ๋ ๊ฒ์ ๊ณ์ฐ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ง๋ง, ์ผ๋จ ๊ตฌ์ถ๋๋ฉด ๋งค์ฐ ๋น ๋ฅธ ๊ฒ์์ด ๊ฐ๋ฅํฉ๋๋ค.
๋ฒค์น๋งํน ๋ฐ ํ๋กํ์ผ๋ง
ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ์ฅ ์ ํฉํ ๋ฌธ์์ด ํจํด ๋งค์นญ ๊ธฐ๋ฒ์ ๊ฒฐ์ ํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์ฝ๋๋ฅผ ๋ฒค์น๋งํนํ๊ณ ํ๋กํ์ผ๋งํ๋ ๊ฒ์ ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ธ์:
console.time()๋ฐconsole.timeEnd(): ์ฝ๋ ๋ธ๋ก์ ์คํ ์๊ฐ์ ์ธก์ ํ๋ ๋ฐ ๊ฐ๋จํ์ง๋ง ํจ๊ณผ์ ์ ๋๋ค.- ์๋ฐ์คํฌ๋ฆฝํธ ํ๋กํ์ผ๋ฌ(์: Chrome DevTools, Node.js Inspector): CPU ์ฌ์ฉ๋, ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํจ์ ํธ์ถ ์คํ์ ๋ํ ์์ธํ ์ ๋ณด๋ฅผ ์ ๊ณตํฉ๋๋ค.
- jsperf.com: ๋ธ๋ผ์ฐ์ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ๋ง๋ค๊ณ ์คํํ ์ ์๋ ์น์ฌ์ดํธ์ ๋๋ค.
๋ฒค์น๋งํนํ ๋๋ ์ค์ ์ด์ ํ๊ฒฝ์ ์กฐ๊ฑด์ ์ ํํ๊ฒ ๋ฐ์ํ๋ ํ์ค์ ์ธ ๋ฐ์ดํฐ์ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ฌ๋ก ์ฐ๊ตฌ ๋ฐ ์์
์์ 1: ์ด๋ฉ์ผ ์ฃผ์ ์ ํจ์ฑ ๊ฒ์ฌ
์ด๋ฉ์ผ ์ฃผ์ ์ ํจ์ฑ ๊ฒ์ฌ๋ ์ ๊ท ํํ์์ ์์ฃผ ์ฌ์ฉํ๋ ์ผ๋ฐ์ ์ธ ์์ ์ ๋๋ค. ๊ฐ๋จํ ์ด๋ฉ์ผ ์ ํจ์ฑ ๊ฒ์ฌ ํจํด์ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค:
```javascript const emailRegex = /[^\s@]+@[^\s@]+\.[^\s@]+$/; console.log(emailRegex.test("test@example.com")); // true console.log(emailRegex.test("invalid email")); // false ```ํ์ง๋ง ์ด ํจํด์ ๊ทธ๋ค์ง ์๊ฒฉํ์ง ์์์ ์ ํจํ์ง ์์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค. ๋ ๊ฒฌ๊ณ ํ ํจํด์ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค:
```javascript const emailRegexRobust = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; console.log(emailRegexRobust.test("test@example.com")); // true console.log(emailRegexRobust.test("invalid email")); // false ```๋ ๋ฒ์งธ ํจํด์ด ๋ ์ ํํ์ง๋ง, ๋ ๋ณต์กํ๊ณ ์ ์ฌ์ ์ผ๋ก ๋ ๋๋ฆฝ๋๋ค. ๋๋์ ์ด๋ฉ์ผ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํด์๋ ์ ์ฉ ์ด๋ฉ์ผ ์ ํจ์ฑ ๊ฒ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ API๋ฅผ ์ฌ์ฉํ๋ ๋ฑ ๋์์ ์ธ ์ ํจ์ฑ ๊ฒ์ฌ ๊ธฐ๋ฒ์ ๊ณ ๋ คํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
์์ 2: ๋ก๊ทธ ํ์ผ ํ์ฑ
๋ก๊ทธ ํ์ผ ํ์ฑ์ ์ข ์ข ๋๋์ ํ ์คํธ ๋ด์์ ํน์ ํจํด์ ๊ฒ์ํ๋ ์์ ์ ํฌํจํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํน์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ํฌํจํ๋ ๋ชจ๋ ์ค์ ์ถ์ถํ๊ณ ์ถ์ ์ ์์ต๋๋ค.
```javascript const logData = "... ERROR: Something went wrong ... WARNING: Low disk space ... ERROR: Another error occurred ..."; const errorRegex = /^.*ERROR:.*$/gm; // 'm' ํ๋๊ทธ๋ ๋ค์ค ๋ผ์ธ const errorLines = logData.match(errorRegex); console.log(errorLines); // [ 'ERROR: Something went wrong', 'ERROR: Another error occurred' ] ```์ด ์์ ์์ errorRegex ํจํด์ "ERROR"๋ผ๋ ๋จ์ด๋ฅผ ํฌํจํ๋ ์ค์ ๊ฒ์ํฉ๋๋ค. m ํ๋๊ทธ๋ ๋ค์ค ๋ผ์ธ ๋งค์นญ์ ํ์ฑํํ์ฌ ํจํด์ด ์ฌ๋ฌ ์ค์ ํ
์คํธ์ ๊ฑธ์ณ ๊ฒ์ํ ์ ์๋๋ก ํฉ๋๋ค. ๋งค์ฐ ํฐ ๋ก๊ทธ ํ์ผ์ ํ์ฑํ๋ ๊ฒฝ์ฐ, ์ ์ฒด ํ์ผ์ ํ ๋ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ์ง ์๋๋ก ์คํธ๋ฆฌ๋ฐ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์. Node.js ์คํธ๋ฆผ์ ์ด ๋งฅ๋ฝ์์ ํนํ ์ ์ฉํ ์ ์์ต๋๋ค. ๋ํ, ๋ก๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ธ๋ฑ์ฑ(๊ฐ๋ฅํ๋ค๋ฉด)ํ๋ฉด ๊ฒ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
์์ 3: HTML์์ ๋ฐ์ดํฐ ์ถ์ถ
HTML์์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๋ ๊ฒ์ HTML ๋ฌธ์์ ๋ณต์กํ๊ณ ์ข ์ข ์ผ๊ด์ฑ ์๋ ๊ตฌ์กฐ ๋๋ฌธ์ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์ ๊ท ํํ์์ ์ด ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ง๋ง, ์ข ์ข ๊ฐ์ฅ ๊ฒฌ๊ณ ํ ํด๊ฒฐ์ฑ ์ ์๋๋๋ค. jsdom๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ HTML์ ํ์ฑํ๊ณ ์กฐ์ํ๋ ๋ ์ ๋ขฐํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
ํ์ง๋ง ๋ฐ์ดํฐ ์ถ์ถ์ ์ ๊ท ํํ์์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ, ์๋ํ์ง ์์ ์ฝํ ์ธ ์ ์ผ์นํ๋ ๊ฒ์ ํผํ๊ธฐ ์ํด ํจํด์ ๊ฐ๋ฅํ ํ ๊ตฌ์ฒด์ ์ผ๋ก ์์ฑํด์ผ ํฉ๋๋ค.
๊ธ๋ก๋ฒ ๊ณ ๋ ค์ฌํญ
๊ธ๋ก๋ฒ ์ฌ์ฉ์๋ฅผ ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ ๋๋ ๋ฌธ์์ด ํจํด ๋งค์นญ์ ์ํฅ์ ์ค ์ ์๋ ๋ฌธํ์ ์ฐจ์ด์ ํ์งํ ๋ฌธ์ ๋ฅผ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด:
- ๋ฌธ์ ์ธ์ฝ๋ฉ: ๊ตญ์ ๋ฌธ์์์ ๋ฌธ์ ๋ฅผ ํผํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค์ํ ๋ฌธ์ ์ธ์ฝ๋ฉ(์: UTF-8)์ ์ฌ๋ฐ๋ฅด๊ฒ ์ฒ๋ฆฌํ๋์ง ํ์ธํ์ธ์.
- ๋ก์ผ์ผ๋ณ ํจํด: ์ ํ๋ฒํธ, ๋ ์ง, ํตํ์ ๊ฐ์ ๊ฒ๋ค์ ๋ํ ํจํด์ ๋ก์ผ์ผ์ ๋ฐ๋ผ ํฌ๊ฒ ๋ค๋ฆ
๋๋ค. ๊ฐ๋ฅํ ๋๋ง๋ค ๋ก์ผ์ผ๋ณ ํจํด์ ์ฌ์ฉํ์ธ์. ์๋ฐ์คํฌ๋ฆฝํธ์
Intl๊ณผ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. - ๋์๋ฌธ์ ๊ตฌ๋ถ ์๋ ๋งค์นญ: ๋์๋ฌธ์ ๊ตฌ๋ถ ๊ท์น์ ์ฐจ์ด๋ก ์ธํด ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ง ์๋ ๋งค์นญ์ด ๋ก์ผ์ผ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์ ์ ์์์ ์ธ์งํ์ธ์.
๋ชจ๋ฒ ์ฌ๋ก
์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ์์ด ํจํด ๋งค์นญ์ ์ต์ ํํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ ๋ชจ๋ฒ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ฐ์ดํฐ ์ดํดํ๊ธฐ: ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ๊ณ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํจํด์ ์๋ณํ์ธ์. ์ด๋ ๊ฐ์ฅ ์ ์ ํ ํจํด ๋งค์นญ ๊ธฐ๋ฒ์ ์ ํํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ํจ์จ์ ์ธ ํจํด ์์ฑํ๊ธฐ: ์์์ ์ค๋ช ํ ์ต์ ํ ๊ธฐ๋ฒ์ ๋ฐ๋ผ ํจ์จ์ ์ธ ์ ๊ท ํํ์์ ์์ฑํ๊ณ ๋ถํ์ํ ๋ฐฑํธ๋ํน์ ํผํ์ธ์.
- ๋ฒค์น๋งํน ๋ฐ ํ๋กํ์ผ๋ง: ์ฝ๋๋ฅผ ๋ฒค์น๋งํนํ๊ณ ํ๋กํ์ผ๋งํ์ฌ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ์ต์ ํ์ ์ํฅ์ ์ธก์ ํ์ธ์.
- ์ฌ๋ฐ๋ฅธ ๋๊ตฌ ์ ํํ๊ธฐ: ํจํด์ ๋ณต์ก์ฑ๊ณผ ๋ฐ์ดํฐ ํฌ๊ธฐ์ ๋ฐ๋ผ ์ ์ ํ ํจํด ๋งค์นญ ๋ฐฉ๋ฒ์ ์ ํํ์ธ์. ๊ฐ๋จํ ํจํด์๋ ๋ฌธ์์ด ๋ฉ์๋๋ฅผ, ๋ ๋ณต์กํ ํจํด์๋ ์ ๊ท ํํ์์ด๋ ๋์ฒด ์๊ณ ๋ฆฌ์ฆ ์ฌ์ฉ์ ๊ณ ๋ คํ์ธ์.
- ์ ์ ํ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉํ๊ธฐ: ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ ์์ํฌ๋ฅผ ํ์ฉํ์ฌ ์ฝ๋๋ฅผ ๋จ์ํํ๊ณ ์ฑ๋ฅ์ ํฅ์์ํค์ธ์. ์๋ฅผ ๋ค์ด, ์ ์ฉ ์ด๋ฉ์ผ ์ ํจ์ฑ ๊ฒ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฌธ์์ด ๊ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ ๊ณ ๋ คํด ๋ณด์ธ์.
- ๊ฒฐ๊ณผ ์บ์ฑํ๊ธฐ: ์ ๋ ฅ ๋ฐ์ดํฐ๋ ํจํด์ด ์์ฃผ ๋ณ๊ฒฝ๋์ง ์๋ ๊ฒฝ์ฐ, ํจํด ๋งค์นญ ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํ์ฌ ๋ฐ๋ณต์ ์ผ๋ก ์ฌ๊ณ์ฐํ๋ ๊ฒ์ ํผํ์ธ์.
- ๋น๋๊ธฐ ์ฒ๋ฆฌ ๊ณ ๋ คํ๊ธฐ: ๋งค์ฐ ๊ธด ๋ฌธ์์ด์ด๋ ๋ณต์กํ ํจํด์ ๊ฒฝ์ฐ, ์น ์์ปค(Web Workers)์ ๊ฐ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ง ์๊ณ ๋ฐ์ํ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์งํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
๊ฒฐ๋ก
์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ์์ด ํจํด ๋งค์นญ ์ต์ ํ๋ ๊ณ ์ฑ๋ฅ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ค์ํ ํจํด ๋งค์นญ ๋ฐฉ๋ฒ์ ์ฑ๋ฅ ํน์ฑ์ ์ดํดํ๊ณ ์ด ๊ธ์์ ์ค๋ช ํ ์ต์ ํ ๊ธฐ๋ฒ์ ์ ์ฉํจ์ผ๋ก์จ ์ฝ๋์ ์๋ต์ฑ๊ณผ ํจ์จ์ฑ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ณ ์ต์ ํ์ ์ํฅ์ ์ธก์ ํ๊ธฐ ์ํด ์ฝ๋๋ฅผ ๋ฒค์น๋งํนํ๊ณ ํ๋กํ์ผ๋งํ๋ ๊ฒ์ ์์ง ๋ง์ธ์. ์ด๋ฌํ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ๊ณผ ๋ณต์กํ ํจํด์ ๋ค๋ฃฐ ๋์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ํํ๊ฒ ์๋ํ๋๋ก ๋ณด์ฅํ ์ ์์ต๋๋ค. ๋ํ, ์ ์ธ๊ณ ์ฌ์ฉ์์๊ฒ ์ต์์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๊ธฐ ์ํด ๊ธ๋ก๋ฒ ์ฌ์ฉ์ ๋ฐ ํ์งํ ๊ณ ๋ ค์ฌํญ์ ๊ธฐ์ตํ์ธ์.